import { req } from '@/util/request'
import type { Page, PageOprion, ResData } from '@/types/index'
import type { RoleName } from '@/types/role'
import type { MenuHandleAuthData, MenuTable } from '@/types/menu'
import type { UserTable } from '@/types/user'
import type { UserInfo, UserRoleInfo } from '@/types/sign'

/**
 * 查询自己的角色信息
 * @returns
 */
export function getMyRoleNmaes(): ResData<RoleName[]> {
  return req.get('/user/get/my_roles_name')
}

/**
 * 查询自己的菜单
 * @returns
 */
export function getMyMenus(): ResData<MenuTable[]> {
  return req.get('/user/get/my_menus')
}

/**
 * 查询自己所有的菜单按钮
 * @param rid
 * @returns
 */
export function getMyMenuHandle(rid: number): ResData<MenuHandleAuthData> {
  return req.get('/user/get_my_menu_handle', {
    params: {
      rid
    }
  })
}

/**
 * 用户获取自己的信息接口
 * @returns 自己的信息  返回 用户的角色信息以及 用户的 基本信息
 */
export function getMyInfo(): ResData<UserRoleInfo> {
  return req.get('/user/get/my_info')
}

/**
 * 用户管理页面用于查询用户的接口
 * @param page 分页参数
 * @param cdn 查询条件
 * @returns
 */
export function getAllUser(
  page: PageOprion,
  cdn: UserTable = {},
  order: string = ''
): ResData<Page<UserTable>> {
  return req.post('/user/get/all', {
    page,
    cdn: {
      nickname: cdn.nickname,
      username: cdn.username,
      sex: cdn.sex,
      status: cdn.status,
      initTime: cdn.initTime,
      order: {
        time: order
      }
    }
  })
}

/**
 * 向系统中添加用户
 * @returns
 */
export function userAdd(data: UserTable): ResData<any> {
  return req.post('/user/add', data)
}

/**
 * 删除系统中的用户
 * @param ids 需要删除的用户id
 * @returns
 */
export function userDel(ids: number[]): ResData<any> {
  return req.post('/user/del', ids)
}

/**
 * 修改用户基本信息
 * @param data 用户基本信息
 * @returns
 */
export function userUpdate(data: UserTable): ResData<any> {
  return req.post('/user/update', data)
}

/**
 * 用户修改密码
 * @param pwd 新密码
 * @returns
 */
export function userUpdatePwd(oPwd: string, pwd: string): ResData<any> {
  return req.post('/user/update/pwd', {
    pwd,
    oPwd
  })
}

/**
 * 修改用户密码
 * @param id 用户id
 * @param pwd 新密码
 * @returns
 */
export function userResetPwd(id: number, pwd: string): ResData<any> {
  return req.post('/user/reset/pwd', {
    id,
    pwd
  })
}

/**
 * 用户修改自己的信息
 * @param info 用户信息
 * @returns
 */
export function userUpdateSelf(info: UserInfo): ResData<any> {
  return req.post('/user/update/self', info)
}

/**
 * 获取用户 拥有的角色
 * @param uid 用户id
 * @returns
 */
export function getUserRoles(uid: number): ResData<RoleName[]> {
  return req.get('/user/get/roles', {
    params: {
      uid
    }
  })
}

/**
 * 修改用户拥有的角色
 * @param uid 用户id
 * @param rids 角色id组
 * @returns
 */
export function updateUserRoles(uid: number, rids: number[]): ResData<any> {
  return req.post('/user/role/update', {
    uid,
    rids
  })
}

/**
 * 获取用户基本信息
 * @param id 用户id
 * @returns
 */
export function getUserBaseInfo(id: number): ResData<UserTable> {
  return req.get('/user/get/baseinfo', { params: { id } })
}
